package com.ssyt.yt1.day21;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 字节输入流:InputStream
 * 
 * @author Administrator
 *
 */
public class InputStreamDemo {

	/**
	 * 不适合读取大文件
	 * 
	 * @throws IOException
	 */
	@Deprecated
	public void test1() throws IOException {
		// 1）使用File类打开一个文件
		File file = new File("d:/hello.txt");
		if (!file.exists()) {
			file.createNewFile();
		}
		// 2）通过字节流或字符流的子类，指定输出的位置
		InputStream inputstream = null;
		try {
			inputstream = new FileInputStream(file);
			// 3）进行读/写操作
			byte[] bytes = new byte[(int) file.length()];
			inputstream.read(bytes);
			System.out.println(new String(bytes));
		} finally {
			// 4）关闭输入/输出
			// 注：IO操作属于资源操作，对于资源操作，最后必须关闭。
			if (inputstream != null) {
				inputstream.close();
			}
		}
		System.out.println("读取文件成功...");
	}

	/**
	 * 适合读取大文件：分批读取
	 * 
	 * @throws IOException
	 */
	public static void test2() throws IOException {
		// 1）使用File类打开一个文件
		File file = new File("d:/hello.txt");
		if (!file.exists()) {
			file.createNewFile();
		}
		// 2）通过字节流或字符流的子类，指定输出的位置
		InputStream inputstream = null;
		try {
			inputstream = new FileInputStream(file);
			// 3）进行读/写操作
			// byte[] bytes = new byte[(int) file.length()];
			// inputstream.read(bytes);
			// System.out.println(new String(bytes));
			byte[] bytes = new byte[1024]; // 1025 = 1024 + 1
			int len = 0;
			while ((len = inputstream.read(bytes)) != -1) {
				System.out.println(new String(bytes, 0, len));
			}
		} finally {
			// 4）关闭输入/输出
			// 注：IO操作属于资源操作，对于资源操作，最后必须关闭。
			if (inputstream != null) {
				inputstream.close();
			}
		}
		System.out.println("读取文件成功...");
	}

	/**
	 * 读取中文的问题（一个中文有几个字节？一般来说是两个，如果是UTF-8就三个）<br/>
	 * 结论：读取文字用字符流！
	 * 
	 * @throws IOException
	 */
	public static void test3() throws IOException {
		// 1）使用File类打开一个文件
		File file = new File("d:/hello.txt");
		if (!file.exists()) {
			file.createNewFile();
		}
		// 2）通过字节流或字符流的子类，指定输出的位置
		InputStream inputstream = null;
		try {
			inputstream = new FileInputStream(file);
			// 3）进行读/写操作
			byte[] bytes = new byte[6];
			int len = 0;
			while ((len = inputstream.read(bytes)) != -1) {
				System.out.println(new String(bytes, 0, len));
			}
		} finally {
			// 4）关闭输入/输出
			// 注：IO操作属于资源操作，对于资源操作，最后必须关闭。
			if (inputstream != null) {
				inputstream.close();
			}
		}
		System.out.println("读取文件成功...");
	}

	public static void main(String[] args) throws IOException {
		// test1();
		// test2();
		test3();
	}
}
